home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / perl / 5.10.0 / Pod / Simple / SimpleTree.pm < prev    next >
Encoding:
Text File  |  2009-06-26  |  3.8 KB  |  156 lines

  1.  
  2.  
  3. require 5;
  4. package Pod::Simple::SimpleTree;
  5. use strict;
  6. use Carp ();
  7. use Pod::Simple ();
  8. use vars qw( $ATTR_PAD @ISA $VERSION $SORT_ATTRS);
  9. $VERSION = '2.02';
  10. BEGIN {
  11.   @ISA = ('Pod::Simple');
  12.   *DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG;
  13. }
  14.  
  15. __PACKAGE__->_accessorize(
  16.   'root',   # root of the tree
  17. );
  18.  
  19. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  20.  
  21. sub _handle_element_start { # self, tagname, attrhash
  22.   DEBUG > 2 and print "Handling $_[1] start-event\n";
  23.   my $x = [$_[1], $_[2]];
  24.   if($_[0]{'_currpos'}) {
  25.     push    @{ $_[0]{'_currpos'}[0] }, $x; # insert in parent's child-list
  26.     unshift @{ $_[0]{'_currpos'} },    $x; # prefix to stack
  27.   } else {
  28.     DEBUG and print " And oo, it gets to be root!\n";
  29.     $_[0]{'_currpos'} = [   $_[0]{'root'} = $x   ];
  30.       # first event!  set to stack, and set as root.
  31.   }
  32.   DEBUG > 3 and print "Stack is now: ",
  33.     join(">", map $_->[0], @{$_[0]{'_currpos'}}), "\n";
  34.   return;
  35. }
  36.  
  37. sub _handle_element_end { # self, tagname
  38.   DEBUG > 2 and print "Handling $_[1] end-event\n";
  39.   shift @{$_[0]{'_currpos'}};
  40.   DEBUG > 3 and print "Stack is now: ",
  41.     join(">", map $_->[0], @{$_[0]{'_currpos'}}), "\n";
  42.   return;
  43. }
  44.  
  45. sub _handle_text { # self, text
  46.   DEBUG > 2 and print "Handling $_[1] text-event\n";
  47.   push @{ $_[0]{'_currpos'}[0] }, $_[1];
  48.   return;
  49. }
  50.  
  51.  
  52. # A bit of evil from the black box...  please avert your eyes, kind souls.
  53. sub _traverse_treelet_bit {
  54.   DEBUG > 2 and print "Handling $_[1] paragraph event\n";
  55.   my $self = shift;
  56.   push @{ $self->{'_currpos'}[0] }, [@_];
  57.   return;
  58. }
  59. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  60. 1;
  61. __END__
  62.  
  63. =head1 NAME
  64.  
  65. Pod::Simple::SimpleTree -- parse Pod into a simple parse tree 
  66.  
  67. =head1 SYNOPSIS
  68.  
  69.   % cat ptest.pod
  70.   
  71.   =head1 PIE
  72.   
  73.   I like B<pie>!
  74.   
  75.   % perl -MPod::Simple::SimpleTree -MData::Dumper -e \
  76.      "print Dumper(Pod::Simple::SimpleTree->new->parse_file(shift)->root)" \
  77.      ptest.pod
  78.   
  79.   $VAR1 = [
  80.             'Document',
  81.             { 'start_line' => 1 },
  82.             [
  83.               'head1',
  84.               { 'start_line' => 1 },
  85.               'PIE'
  86.             ],
  87.             [
  88.               'Para',
  89.               { 'start_line' => 3 },
  90.               'I like ',
  91.               [
  92.                 'B',
  93.                 {},
  94.                 'pie'
  95.               ],
  96.               '!'
  97.             ]
  98.           ];
  99.  
  100. =head1 DESCRIPTION
  101.  
  102. This class is of interest to people writing a Pod processor/formatter.
  103.  
  104. This class takes Pod and parses it, returning a parse tree made just
  105. of arrayrefs, and hashrefs, and strings.
  106.  
  107. This is a subclass of L<Pod::Simple> and inherits all its methods.
  108.  
  109. This class is inspired by XML::Parser's "Tree" parsing-style, although
  110. it doesn't use exactly the same LoL format.
  111.  
  112. =head1 METHODS
  113.  
  114. At the end of the parse, call C<< $parser->root >> to get the
  115. tree's top node.
  116.  
  117. =head1 Tree Contents
  118.  
  119. Every element node in the parse tree is represented by an arrayref of
  120. the form: C<[ I<elementname>, \%attributes, I<...subnodes...> ]>.
  121. See the example tree dump in the Synopsis, above.
  122.  
  123. Every text node in the tree is represented by a simple (non-ref)
  124. string scalar.  So you can test C<ref($node)> to see whather you have
  125. an element node or just a text node.
  126.  
  127. The top node in the tree is C<[ 'Document', \%attributes,
  128. I<...subnodes...> ]>
  129.  
  130.  
  131. =head1 SEE ALSO
  132.  
  133. L<Pod::Simple>
  134.  
  135. L<perllol>
  136.  
  137. L<The "Tree" subsubsection in XML::Parser|XML::Parser/"Tree">
  138.  
  139. =head1 COPYRIGHT AND DISCLAIMERS
  140.  
  141. Copyright (c) 2002 Sean M. Burke.  All rights reserved.
  142.  
  143. This library is free software; you can redistribute it and/or modify it
  144. under the same terms as Perl itself.
  145.  
  146. This program is distributed in the hope that it will be useful, but
  147. without any warranty; without even the implied warranty of
  148. merchantability or fitness for a particular purpose.
  149.  
  150. =head1 AUTHOR
  151.  
  152. Sean M. Burke C<sburke@cpan.org>
  153.  
  154. =cut
  155.  
  156.